home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 2
/
Atari Mega Archive CD - Volume 2.iso
/
minix
/
up1510b.tgz
/
up1510b
/
src
/
commands
/
de
/
de.h
< prev
next >
Wrap
C/C++ Source or Header
|
1990-07-23
|
8KB
|
324 lines
/****************************************************************/
/* */
/* de.h */
/* */
/* Definitions for the "Disk editor". */
/* */
/****************************************************************/
/* origination 1989-Jan-15 Terrence W. Holm */
/****************************************************************/
/****************************************************************/
/* */
/* de(1) */
/* */
/* This is the MINIX disk editor. It allows the user to */
/* observe and modify a file system. It can also be used */
/* to recover unlink(2)'ed files */
/* */
/* See the de(1) man page. */
/* */
/****************************************************************/
/****************************************************************/
/* */
/* de Copyright Terrence W. Holm 1989 */
/* */
/* This program was written for users of the Minix operating */
/* system, and in the spirit of other public domain software */
/* written for said system, this source code is made available */
/* at no cost to everyone. I assume no responsibility for */
/* damage to file systems caused by this program. */
/* */
/* This program (one .h, five .c's and a "man" page) may be */
/* copied and/or modified subject to (1) no charge must be */
/* made for distribution, other than for the medium, (2) all */
/* modified sources must be clearly marked as such, (3) all */
/* sources must carry this copyright. */
/* */
/****************************************************************/
/****************************************************************/
/* */
/* files */
/* */
/* de.h Definitions */
/* de.c The main loop */
/* de_stdin.c Character input routines */
/* de_stdout.c Output routines */
/* de_diskio.c File system read/write */
/* de_recover.c File restoration routines */
/* */
/* de.1 "Man" page */
/* Makefile For "make" */
/* README Installation help */
/* */
/* */
/* fs/path.c was modified to support the 'x' command. */
/* fs/link.c and fs/open.c were changed for 'X'. */
/* */
/****************************************************************/
/* General constants */
#define MAX_STRING 60 /* For all input lines */
#define MAX_PREV 8 /* For 'p' command */
#define SEARCH_BUFFER (4*K) /* For '/' and 'n' */
/* Files */
#define TMP "/tmp" /* For "-r" output */
#define DEV "/dev" /* Where devices are */
/* a.out header constants (see a.out.h, if you have it) */
#if (CHIP == INTEL)
#define A_OUT 0x0301
#define SPLIT 0x0420
#endif
#if (CHIP == M68000)
#define A_OUT 0x0301
#define SPLIT 0x0B20
#endif
/* Each buffer is 1k. In WORD mode 16 words (32 bytes) can be */
/* displayed at once. In BLOCK mode 1K bytes can be displayed. */
/* In MAP mode 2048 bits (256 bytes) are displayed. */
#define K 1024 /* STD_BLK */
#define K_MASK (~(K-1)) /* Round to K boundary */
#define K_SHIFT 10 /* Ie. 1<<10 = K */
#define PAGE_MASK 0x1f /* Word mode: 32 bytes */
#define PAGE_SHIFT 5 /* Ie. 1<<5 = 32 */
#define MAP_BITS_PER_BLOCK (8 * K) /* 1k block, 8192 bits */
#define MAP_MASK 0xff /* 256 bytes/screen */
/* Terminal i/o codes */
#define CTRL_D '\004' /* ASCII ^D */
#define BELL '\007' /* ASCII bell code */
#define BS '\010' /* ASCII back space */
#define CTRL_U '\025' /* ASCII ^U */
#define ESCAPE '\033' /* ASCII escape code */
#define DEL '\177' /* ASCII delete code */
/* Input escape codes generated by the Minix console. */
/* Format: ESC [ X. */
#define ESC_HOME ('H' + 0x80)
#define ESC_UP ('A' + 0x80)
#define ESC_PGUP ('V' + 0x80)
#define ESC_LEFT ('D' + 0x80)
#define ESC_5 ('G' + 0x80)
#define ESC_RIGHT ('C' + 0x80)
#define ESC_END ('Y' + 0x80)
#define ESC_DOWN ('B' + 0x80)
#define ESC_PGDN ('U' + 0x80)
#define ESC_PLUS ('T' + 0x80)
#define ESC_MINUS ('S' + 0x80)
/* Graphic box codes - only applicable for console display */
/* in visual mode "map". */
#if (CHIP == INTEL)
#define BOX_CLR ' ' /* Empty box */
#define BOX_ALL '\333' /* Filled box */
#define BOX_TOP '\337' /* Filled upper half */
#define BOX_BOT '\334' /* Filled lower half */
#endif
#if (CHIP == M68000)
/* Please change these. */
#define BOX_CLR ' ' /* Empty box */
#define BOX_ALL '=' /* Filled box */
#define BOX_TOP '-' /* Filled upper half */
#define BOX_BOT '_' /* Filled lower half */
#endif
/* Move positions for the output display. */
#define STATUS_COLUMN 2
#define STATUS_LINE 0
#define BLOCK_COLUMN 4
#define BLOCK_LINE 4
#define INFO_COLUMN 30
#define INFO_LINE BLOCK_LINE
#define PROMPT_COLUMN 0
#define PROMPT_LINE 23
#define WARNING_COLUMN 10
#define WARNING_LINE 10
/* Values returned by Process() and Get_Filename() */
#define OK 0 /* No update required */
#define REDRAW 1 /* Redraw whole screen */
#define REDRAW_POINTERS 2 /* Redraw just ptrs */
#define ERROR 3 /* Beep */
/* Visual modes */
#define WORD 1
#define BLOCK 2
#define MAP 3
typedef struct de_state /* State of disk ed. */
{
/* Information from super block */
unsigned inodes; /* Number of i-nodes */
unsigned zones; /* Total # of blocks */
unsigned inode_maps; /* I-node map blocks */
unsigned zone_maps; /* Zone map blocks */
unsigned inode_blocks; /* I-node blocks */
unsigned first_data; /* Total non-data blks */
unsigned inodes_in_map; /* Bits in i-node map */
unsigned zones_in_map; /* Bits in zone map */
/* Information from map blocks */
char inode_map[ I_MAP_SLOTS * K ];
char zone_map[ ZMAP_SLOTS * K ];
/* Information for current block */
off_t address; /* Current address */
off_t last_addr; /* For erasing ptrs */
unsigned block; /* Current block (1K) */
unsigned offset; /* Offset within block */
char buffer[ K ];
/* Display state */
int mode; /* WORD, BLOCK or MAP */
int output_base; /* 2, 8, 10, or 16 */
/* Search information */
char search_string[ MAX_STRING + 1 ]; /* For '/' and 'n' */
off_t prev_addr[ MAX_PREV ]; /* For 'p' command */
int prev_mode[ MAX_PREV ];
/* File information */
char *device_name; /* From command line */
int device_d;
int device_mode; /* O_RDONLY or O_RDWR */
unsigned device_size; /* Number of blocks */
char file_name[ MAX_STRING + 1 ]; /* For 'w' and 'W' */
FILE *file_f;
int file_written; /* Flag if written to */
} de_state;
/* Forward references for external routines */
/* libc.a */
struct passwd *getpwuid();
struct group *getgrgid();
char *ctime();
char *getenv();
char *tgetstr();
char *tgoto();
char *ttyname();
FILE *fopen();
off_t lseek();
/* de.c */
void main();
int Process();
void Push();
int Get_Filename();
int Get_Count();
int Str_Int();
int In_Use();
ino_t Find_Inode();
void Exec_Shell();
void Sigint();
void Error();
/* de_stdin.c */
void Save_Term();
void Set_Term();
void Reset_Term();
int Get_Char();
char *Get_Line();
int Arrow_Esc();
/* de_stdout.c */
int Init_Termcap();
void Goto();
void Draw_Help_Screen();
void Wait_For_Key();
void Draw_Prompt();
void Erase_Prompt();
void Draw_Screen();
void Draw_Strings();
void Block_Type();
void Draw_Words();
void Draw_Info();
void Draw_Block();
void Draw_Map();
void Draw_Pointers();
void Draw_Offset();
void Word_Pointers();
void Block_Pointers();
void Map_Pointers();
void Print_Number();
void Print_Ascii();
void Warning();
/* de_diskio.c */
void Read_Disk();
void Read_Block();
void Read_Super_Block();
void Read_Bit_Maps();
off_t Search();
void Write_Word();
/* de_recover.c */
int Path_Dir_File();
char *File_Device();
ino_t Find_Deleted_Entry();
off_t Recover_Blocks();
#undef printf /* Because fs/const.h */
/* defines it. */